package reesoft.common.entity;

import reesoft.common.code.ErrorCode;

/**
 * 处理结果类
 *
 * Created by reesoft on 2017-07-14
 */
public class Result<DataType>
{
    /**
     * 结果代码
     */
    private int code;

    /**
     * 结果描述
     */
    private String message;

    /**
     * 返回数据对象
     */
    private DataType data;

    /**
     * 构造函数
     */
    public Result()
    {
    }

    /**
     * 构造函数
     *
     * @param code    结果代码
     * @param message 结果描述
     */
    public Result(int code, String message)
    {
        this.code = code;
        this.message = message;
    }

    /**
     * 构造函数
     * 用于不同 DataType 的结果对象之间的复制
     *
     * @param result 被复制的结果对象
     */
    public Result(Result result)
    {
        this(result.getCode(), result.getMessage());
    }

    /**
     * 构造函数
     *
     * @param errorCode 错误码
     */
    public Result(ErrorCode errorCode)
    {
        this.code = errorCode.getCode();
        this.message = errorCode.getDesc();
    }

    /**
     * 构造函数
     *
     * @param code    结果代码
     * @param message 结果描述
     * @param data    返回数据
     */
    public Result(int code, String message, DataType data)
    {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 构造函数
     *
     * @param errorCode 错误码
     * @param data      返回数据
     */
    public Result(ErrorCode errorCode, DataType data)
    {
        this.code = errorCode.getCode();
        this.message = errorCode.getDesc();
        this.data = data;
    }

    /**
     * 判断处理结果是否成功
     */
    public boolean isSuccess()
    {
        return ErrorCode.SUCCESS.equals(code);
    }

    public int getCode()
    {
        return code;
    }

    public void setCode(int code)
    {
        this.code = code;
    }

    public String getMessage()
    {
        return message;
    }

    public void setMessage(String message)
    {
        this.message = message;
    }

    public DataType getData()
    {
        return data;
    }

    public void setData(DataType data)
    {
        this.data = data;
    }
}
